1056F - Write The Contest - CodeForces Solution


binary search dp math *2500

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
typedef double db;
typedef long double ldb;
const int mxn=105;
int n,m,i,j,t,k,s;
db dp[mxn][mxn*10],c,ti;
struct node
{
db dif;int pt;
}a[mxn];
bool cmp(node x,node y){return x.dif<y.dif;}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
scanf("%d%lf%lf",&n,&c,&ti);
for (i=1;i<=n;++i) scanf("%lf%d",&a[i].dif,&a[i].pt);
sort(a+1,a+n+1,cmp);
for (j=0;j<=n;++j)
for (i=0;i<=n*10;++i) dp[j][i]=1e18;
s=0;dp[0][0]=0.0;
for (i=1;i<=n;++i)
{
for (k=i-1;k>=0;--k)
for (j=s;j>=0;--j)
dp[k+1][j+a[i].pt]=min(dp[k+1][j+a[i].pt],dp[k][j]*10.0/9.0+a[i].dif*10.0/9.0);
s+=a[i].pt;
}
int ans=0;
for (i=0;i<=n;++i)
for (j=0;j<=s;++j)
{
db tmp;
if (dp[i][j]>=1.0/c) tmp=2.0*sqrt(dp[i][j]/c)-1.0/c;
else tmp=dp[i][j];
if (tmp+i*10.0<=ti) ans=max(ans,j);
}
printf("%d\n",ans);
}
return 0;
}


Comments

Submit
0 Comments
More Questions

39F - Pacifist frogs
1451C - String Equality
386A - Second-Price Auction
1690E - Price Maximization
282B - Painting Eggs
440A - Forgotten Episode
233B - Non-square Equation
628B - New Skateboard
262B - Roma and Changing Signs
755C - PolandBall and Forest
456B - Fedya and Maths
376B - IOU
1623B - Game on Ranges
1118A - Water Buying
1462C - Unique Number
301A - Yaroslav and Sequence
38A - Army
38C - Blinds
1197A - DIY Wooden Ladder
1717D - Madoka and The Corruption Scheme
1296D - Fight with Monsters
729D - Sea Battle
788A - Functions again
1245B - Restricted RPS
1490D - Permutation Transformation
1087B - Div Times Mod
1213B - Bad Prices
1726B - Mainak and Interesting Sequence
1726D - Edge Split
1726C - Jatayu's Balanced Bracket Sequence